﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace TestImport.Model.DatabaseRepositories
{
    public abstract partial class DatabaseRepository
    {
        /*****************/
        /* BoeklijstItem */
        /*****************/

        public DataTable BoeklijstItem_GetData()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "SELECT boeklijstItemID, boekID, opmerking, categorieCode, huurboek, schoolPrijs, huurPrijs, boeklijstID, isbnNr, boeksoortCode, titel FROM BoeklijstItem");
        }

        public DataTable BoeklijstItem_CountBoeklijstItems()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "SELECT COUNT(*) FROM BoeklijstItem");
        }

        public DataTable BoeklijstItem_CountBoeklijstItemsByBoekID(int boekID)
        {
            DataTable dt = new DataTable();
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(1);
                dbManager.AddParameters(0, "@boekID", boekID);
                dbManager.ExecuteReader(CommandType.Text, "SELECT COUNT(*) AS aantal FROM BoeklijstItem WHERE (boekID = @boekID)");
                dt.Load(dbManager.DataReader);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return dt;
        }

        public void BoeklijstItem_DeleteByBoeklijstID(int boeklijstID)
        {
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(1);
                dbManager.AddParameters(0, "@boeklijstID", boeklijstID);
                dbManager.ExecuteNonQuery(CommandType.Text, "DELETE FROM BoeklijstItem WHERE (boeklijstID = @boeklijstID)");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
        }

        public void BoeklijstItem_DeleteDummy()
        {
            try
            {
                dbManager.Open();
                dbManager.ExecuteNonQuery(CommandType.Text, "DELETE FROM BoeklijstItem");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
        }

        public DataTable BoeklijstItem_GetDataByBoekenNietBeschikbaar()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "SELECT BoeklijstItem.categorieCode, BoeklijstItem.isbnNr, BoeklijstItem.titel, Boeklijst.groepCode FROM BoeklijstItem INNER JOIN Boeklijst ON BoeklijstItem.boeklijstID = Boeklijst.boeklijstID WHERE (BoeklijstItem.isbnNr NOT IN (SELECT isbnNr FROM Boek))");
        }

        public DataTable BoeklijstItem_GetBoekenNietInBoekLeerling(int boeklijstID, int leerlingID)
        {
            DataTable dt = new DataTable();
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(2);
                dbManager.AddParameters(0, "@boeklijstID", boeklijstID);
                dbManager.AddParameters(1, "@leerlingID", leerlingID);
                dbManager.ExecuteReader(CommandType.Text, "SELECT boekID, boeklijstID, boeklijstItemID, boeksoortCode, categorieCode, huurPrijs, huurboek, isbnNr, opmerking, schoolPrijs, titel FROM BoeklijstItem WHERE (boeklijstID = @boeklijstID) AND (boeklijstItemID NOT IN (SELECT boeklijstItemID FROM LeerlingBoek WHERE (leerlingID = @leerlingID)))");
                dt.Load(dbManager.DataReader);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return dt;
        }

        public DataTable BoeklijstItem_GetDataByBoeklijstID(int boeklijstID)
        {
            DataTable dt = new DataTable();
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(1);
                dbManager.AddParameters(0, "@boeklijstID", boeklijstID);
                dbManager.ExecuteReader(CommandType.Text, "SELECT boekID, boeklijstID, boeklijstItemID, boeksoortCode, categorieCode, huurPrijs, huurboek, isbnNr, opmerking, schoolPrijs, titel FROM BoeklijstItem WHERE (boeklijstID = @boeklijstID)");
                dt.Load(dbManager.DataReader);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return dt;
        }

        public DataTable BoeklijstItem_GetMaxBoeklijstItemID()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "SELECT MAX(boeklijstItemID) AS maxBoeklijstItemID FROM BoeklijstItem");
        }

        public void BoeklijstItem_InsertDummy()
        {
            try
            {
                dbManager.Open();
                dbManager.ExecuteNonQuery(CommandType.Text, "INSERT INTO BoeklijstItem (boekID, isbnNr, boeksoortCode, categorieCode, huurboek, boeklijstID) VALUES (1, '111', 'ab', 'ab', 'True', 1)");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
        }

        public void BoeklijstItem_InsertViaAfhaling(int boekID, string opmerking, string categorieCode, bool huurboek, int schoolPrijs, int huurPrijs, int boeklijstID, int isbnNr, string boeksoortCode)
        {
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(9);
                dbManager.AddParameters(0, "@boekID", boekID);
                dbManager.AddParameters(1, "@opmerking", opmerking);
                dbManager.AddParameters(2, "@categorieCode", categorieCode);
                dbManager.AddParameters(3, "@huurboek", huurboek);
                dbManager.AddParameters(4, "@schoolPrijs", schoolPrijs);
                dbManager.AddParameters(5, "@huurPrijs", huurPrijs);
                dbManager.AddParameters(6, "@boeklijstID", boeklijstID);
                dbManager.AddParameters(7, "@isbnNr", isbnNr);
                dbManager.AddParameters(8, "@boeksoortCode", boeksoortCode);
                dbManager.ExecuteNonQuery(CommandType.Text, "INSERT INTO BoeklijstItem (boekID, opmerking, categorieCode, huurboek, schoolPrijs, huurPrijs, boeklijstID, isbnNr, boeksoortCode) VALUES (@boekID, @opmerking, @categorieCode, @huurboek, @schoolPrijs, @huurPrijs, @boeklijstID, @isbnNr, @boeksoortCode)");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
        }

        public DataTable BoeklijstItem_TruncateDummy()
        {
            return defaultExecuteReaderDataTable(CommandType.Text, "TRUNCATE TABLE BoeklijstItem");
        }

        public void BoeklijstItem_UpdatePrijzen(int schoolPrijs, int huurPrijs, int boeklijstItemID)
        {
            try
            {
                dbManager.Open();
                dbManager.CreateParameters(3);
                dbManager.AddParameters(0, "@schoolPrijs", schoolPrijs);
                dbManager.AddParameters(1, "@huurPrijs", huurPrijs);
                dbManager.AddParameters(2, "@boeklijstItemID", boeklijstItemID);
                dbManager.ExecuteNonQuery(CommandType.Text, "UPDATE BoeklijstItem SET schoolPrijs = @schoolPrijs, huurPrijs = @huurPrijs WHERE (boeklijstItemID = @boeklijstItemID)");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
        }

        public bool BoeklijstItem_Truncate()
        {
            bool succeed = false;
            try
            {
                dbManager.Open();
                dbManager.ExecuteNonQuery(CommandType.Text, "TRUNCATE TABLE BoeklijstItem");
                succeed = true;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            finally
            {
                dbManager.Dispose();
            }
            return succeed;
        }

    }
}
